home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / C / Applications / Moscow ML 1.42 / src / test / test9.sml < prev    next >
Encoding:
Text File  |  1997-08-18  |  735 b   |  39 lines  |  [TEXT/R*ch]

  1. type person = {name: string, age: int};
  2. val p1 : person = {name = "Peter", age = 99};
  3. val {name=name1, age=age1} = p1;
  4. fun nameOfPerson {name=x, age=_} = x;
  5. val name1 = nameOfPerson p1;
  6. val {name,age} = p1;
  7.  
  8. val {name,...}:person = p1;
  9. val {name : string as name1,...} = p1;
  10.  
  11. val f = fn {name=x,...}:person => x;
  12.  
  13. val name1 = #name p1;
  14. val age1 = #age p1;
  15.  
  16. fun f {lab=v} = v+1;
  17.  
  18. fn _ =>                    (* to cheat value polymorphism *) 
  19. let
  20.   fun eq r1 r2 = (#l1 r1) = (#l1 r2)
  21.   val t = eq {l1 = 1, l2 = 3}
  22.              {l1 = 1, l3 = "a"}
  23. in
  24.   (eq, t)
  25. end;
  26.  
  27. (printVal (it ()); ());
  28.  
  29. fn _ =>
  30. let
  31.   val f = fn {l1 = x,...} => x 
  32.   val g = fn {l1 = x, l2 = y} => (x,y)
  33.   val h = fn x => (x=x, f x, g x)
  34. in
  35.   (f, g, h)
  36. end;
  37.  
  38. (printVal (it ()); ());
  39.